package yl.hs.bmipfull.daos.material;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import yl.hs.bmipfull.daos.BaseDao;
import yl.hs.bmipfull.pojo.material.RawMaterialInventoryEntity;
import yl.hs.bmipfull.viewmodels.dataCockpit.WarehouseModel;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 作用:  原材库存信息表持久层接口<br/>
 * 创建时间: 2021年05月19日 09时47分31秒 <br/>
 *
 * @author 张凯
 */
@Repository
public interface IRawMaterialInventoryDao extends BaseDao<RawMaterialInventoryEntity> {

    /**
     * 查询原材库存信息表信息
     *
     * @param map 查询条件 {@link RawMaterialInventoryEntity}
     * @return 原材库存信息表-List<{@link RawMaterialInventoryEntity}>
     */
    List<RawMaterialInventoryEntity> queryList(@Param("map") Map<String, Object> map);

    /**
     * 分页查询原材库存信息表信息
     *
     * @param map 查询条件 {@link RawMaterialInventoryEntity}
     * @return 站内信息-List<{@link RawMaterialInventoryEntity}>
     */
    List<RawMaterialInventoryEntity> queryPage(@Param("map") Map<String, Object> map);

    /**
     * 根据查询条件统计数据数量
     *
     * @param query 查询条件
     * @return 数据数量
     */
    Integer queryCountByCondition(Map<String, Object> query);


    /**
     * 根据仓库编号和原材编号获取库存信息
     * @param whSN 仓库编号
     * @param rmSN 原材编号
     * @return 库存信息
     */
    RawMaterialInventoryEntity findByWHSNAndRmSN(@Param("whSN") String whSN,@Param("rmSN")  String rmSN);

    /**
     * 扣减库存
     * @param whSN 仓库编号
     * @param pSN 产品编号
     * @param quantity 扣减数量
     * @return 扣减结果
     */
    Integer subsideInventory(@Param("whSN")String whSN,@Param("pSN") String pSN,@Param("quantity") BigDecimal quantity);

    /**
     * 增加库存
     * @param whSN 仓库编号
     * @param pSN 产品编号
     * @param quantity 增加数量
     * @return 增加结果
     */
    Integer appendInventory(@Param("whSN")String whSN,@Param("pSN") String pSN,@Param("quantity") BigDecimal quantity);

    /**
     * 根据编号修改数据状态
     * @param snArray 编号
     * @param state 状态
     * @return 受影响行数
     */
    Integer changeStateBySn(String[] snArray,short state);
    /**
     * 根据仓库编号和原材编号获取库存信息
     * @param sn 原材编号
     * @return 库存信息
     */
    List<RawMaterialInventoryEntity> findByRawSn(String sn);

    /**
     * 根据仓库编号获取仓库下所有原材实时库存
     * @param whSN 编号
     * @return 数量
     */
    @Select("SELECT SUM(quantity) from raw_material_inventory WHERE state>=0 and whSN=#{whSN}")
    BigDecimal getSumQuantityByWhSN(String whSN);

    @Select("SELECT ifnull(SUM(quantity),0) from raw_material_inventory WHERE state>=0 and rmSn=#{rmSn}")
    BigDecimal getSumQuantityByRmSN(String rmSn);

    @Select("SELECT * from raw_material_inventory WHERE state>=0 and whSN=#{whSN}")
    List<RawMaterialInventoryEntity> getListByWhSN(String whSN);

    List<WarehouseModel> queryListByCateSN(@Param("cateSN") String glSN);

    List<RawMaterialInventoryEntity> queryListByUnit(@Param("unit") String unit);
}